The evolution of the computer industry is unparalleled in its rate of growth and complexity. Personal computers, for example, which began as little more than calculators having limited memory, tape-driven input capabilities and monochrome display monitors are now able to handle almost any data processing task with relative ease. While the ever-growing increase in computing power provides greater capabilities for programmers and users alike, the corresponding increasing complexity creates an ease of use problem. Consequently, computer system designers are faced with a new challenge, namely to harness the available computing power in a form that is usable even by those with relatively little computer training, to ease the transition of users into a computer-based information paradigm.
In pursuit of this objective, in the early to mid-1980s many new input/output philosophies, such as "user friendly", "WYSIWIG" and "menu driven" became popular. These approaches to the I/O function are particularly applicable to microcomputers, also known as personal computers, which are intended to appeal to a broad audience of computer users, including those who had no previous computer experience. An important aspect of computers which employ these input/output concepts was, and continues to be, the interface which allows the user to input commands and data and to receive results. One particularly prevalent form of interface is known as the graphical user interface (GUI).
In one popular type of graphical user interface, a visual metaphor is presented to the user which defines on a display monitor a work space known as a "desktop" in which the contents of documents are presented in relocatable regions known as "windows". In addition to windows, the graphical user interface includes a number of different types of control objects, which enable the user to select from available options presented by the computer's operating system and/or application programs, as well as provide feedback to the user.
One of the functions provided by such a user interface which has contributed to its appeal is the so-called "copy-and-paste" operation. This feature enables the user to designate, or select, any desired portion of the contents of a document appearing in a window. The user can copy the selected portion of the document to a designated portion of memory known as the "clipboard". Subsequently, the user can retrieve the copied information from the clipboard, and insert it at any desired location within the document.
One of the key features of the clipboard is the fact that it can be accessed by any application program running on the computer. As a result, the user is not limited to inserting the copied information into the same document from which it was copied. Rather, the contents of the clipboard can be placed within any document displayed on the computer's monitor. Thus, for example, the user can select a paragraph of text from a document created with a word processing program and copy it to the clipboard, switch to another text document created with a different word processing program, and copy it into that document. In the same manner, the user can copy the contents of the clipboard into a non-text document, such as a drawing document created with a graphics application program. Once data has been copied to the clipboard, it remains there until replaced by a different set of data. Thus, the data on the clipboard can be repeatedly copied into documents as many times as desired by the user.
To facilitate access to the clipboard by any application program running on the computer, the computer's operating system includes an interface that controls access to the contents of the clipboard by the application programs. In one such operating system, which is designed to run on Macintosh.RTM. brand computers manufactured by Apple Computer, Inc., this interface is known as the "Clipboard Manager".
Originally, application programs gained access to the contents of the clipboard through calls made to the clipboard interface. Basically, these calls instruct the interface to clear the contents of the clipboard, place a selected piece of data on the clipboard, or retrieve the contents of the clipboard. In response thereto, the clipboard interface controls the reading and writing of data to a designated area of memory which functions as the clipboard. The amount of data that could be copied to the clipboard through some interfaces was limited. To overcome this limitation, developers of application programs began to bypass the function of the clipboard interface, and wrote instructions which directly utilized global system variables that provide access to the clipboard area in the memory. To accommodate very large amounts of data to be copied, some programs directly accessed the clipboard file stored on a disk, rather than going through the clipboard interface or using the global system variables, and thereby avoid any size limitations imposed by the interface.
In a multitasking computing environment, two or more application programs can be running on a computer concurrently. At any given time, only one of the programs is in the foreground, in the sense that it has current access to the computer's CPU and files stored in memory. For example, both a word processing program and a drawing program can be currently running on a computer. The manner in which these two programs are provided access to the CPU can be handled in one of two ways. In one approach, known as cooperative scheduling, a program is given CPU access and retains it until it reaches a convenient point at which to relinquish such access. For example, if a program is copying data to the clipboard, once the program becomes the foreground program it remains there until the copy operation has been completed. At that point, it suspends operation so that another program can run in the foreground. As a result, only one program can perform a clipboard operation at a time.
The other approach to multitask scheduling is known as preemptive scheduling. In this approach, each program runs in the foreground in limited time slots determined by the computer's operating system. A single time slot may not be sufficient for the program to complete a given task. Referring to the above example, a program may initiate a clipboard copy operation when it is given a time slot. Before the operation is completed, however, the program may have to suspend its operation, while another program comes to the foreground. In subsequent time slots the first program can complete its copy operation.
There has been a movement towards providing a newer, more robust, clipboard function for user interfaces, which enables programs running in the background, for example a user script, to have access to the contents of the clipboard, in addition to the foreground program. To avoid conflicts between plural applications which may request access to the clipboard at the same time, this type of clipboard interface employs a locking mechanism. In this approach, any given application program running on the computer can access the clipboard at any given time, whether or not it is currently in the foreground. However, while an application has access to the clipboard, it excludes access by any other application program.
To make use of the functionality provided by the new type of clipboard interface, and thereby gain access to the clipboard while running in the background, application programs must be written with instructions that are compatible with preemptive scheduling. Consequently, only newer application programs will have access to the newly available functionality. It is unlikely that a user will immediately buy all new application programs upon obtaining an operating system which contains the new type of clipboard interface. Rather, it is much more likely that the user will continue to use older application programs, which are only designed to work with the more conventional type of cooperative interface. Thus, clipboard interfaces which employ pre-emptive scheduling should be backwardly compatible, so that the clipboard can be accessed by application programs that are designed for cooperative scheduling.